// 数字
const numberReg = /^\d+$|^\d+[.]?\d+$/;
// 中文
const cnReg = /^[\u4e00-\u9fa5]+$/;
const pwdReg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{6,16}$/;
// 邮箱
const emailReg = /^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$/;
// 手机号
const phoneReg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/;
const nameReg = /^[a-zA-Z0-9\u4e00-\u9fa5]+$/;

export default {
    // 数字验证
    validateNumber : function (rule, value, callback) 
    {
        if (!numberReg.test(value)) 
        {
            callback(new Error('请输入数字'));
        } 
        else 
        {
            callback();
        }
    },
    // 中文验证
    validateCn : function (rule, value, callback) 
    {
        if (cnReg.test(value)) 
        {
            callback(new Error('请输入数字或英文'));
        }
        else 
        {
            callback();
        }
    },
    // 邮箱验证
    validateEmail : function (value:string) 
    {
        return new Promise((resolve, reject) => 
        {
            if (!emailReg.test(value)) 
            {
                return reject(new Error('请输入正确的邮箱'));
            }
            resolve(true);
        });
    },
    // 判断是否存在为空的数据
    validateEmpty : function (value)
    {
        return new Promise((resolve, reject) => 
        {
            for (let key in value)
            {
                if (value[key].trim() === '')
                {
                    return reject(new Error('请填写完整信息'));
                }
            }
            resolve(true);
        });
    },
    // 校验密码
    validatePwd : function (value:string)
    {
        return new Promise((resolve, reject) => 
        {
            if (!pwdReg.test(value))
            {
                reject(new Error('密码须包含大小写字母和数字，且不能使用特殊字符'));
            }
            else if (value.length > 16 || value.length < 6)
            {
                reject(new Error('密码长度须在 6 - 16 位'));
            }
            else 
            {
                resolve(true);
            }
        });
    },
    // 校验昵称
    validateNickname : function (value:string)
    {
        return new Promise((resolve, reject) => 
        {
            if (value.length > 8 || value.length < 2)
            {
                reject(new Error('昵称长度须在 2 - 8 位'));
            }
            else 
            {
                resolve(true);
            }
        });
    },
    // 校验名称（支持中英文数字）
    validateName : (rule, value, callback) =>
    {
        if (value === '')
        {
            callback(new Error('名称不能为空'));
        }
        else if (!nameReg.test(value)) 
        {
            callback(new Error('请输入中英文或数字'));
        }
        else if (value.length > 8 || value.length < 2)
        {
            callback(new Error('名称长度须在 2 - 8 位'));
        }
        else 
        {
            callback();
        }
    },
    // 电话验证
    validatePhone : function (rule, value, callback) 
    {
        if (!phoneReg.test(value)) 
        {
            callback(new Error('请输入正确的手机号码'));
        } 
        else 
        {
            callback();
        }
    },
    // 验证旧密码
    validatePwd1 : (rule, value, callback, newPwd, ruleFormRef) =>
    {
        if (value.trim() === '')
        {
            callback(new Error('请输入旧密码'));
        }
        else 
        {
            if (newPwd !== '') 
            {
                if (!ruleFormRef.value) return;
                ruleFormRef.value.validateField('newPassword', () => null);
            }
            callback();
        }
    },
    // 验证新密码
    validatePwd2 : (rule, value, callback, oldPwd) =>
    {
        if (value.trim() === '')
        {
            callback(new Error('请输入新密码'));
        }
        else if (value === oldPwd)
        {
            callback(new Error('新密码与旧密码不能一致'));
        }
        else if (!pwdReg.test(value))
        {
            callback(new Error('新密码须包含大小写字母和数字，且不能使用特殊字符'));
        }
        else if (value.length > 16 || value.length < 6)
        {
            callback(new Error('新密码长度须在 6 - 16 位'));
        }
        else 
        {
            callback();
        }
    }

};
